3.8 QUIC 与运输层功能的演化
互联网发展几十年以来,要求应用从传统的 TCP、UDP 中二选一作为运输层服务已经无法适应当前应用需求越来越多样的环境。因此,多种不同的 TCP 协议应运而生,各自有着不同的特性以适应不同的环境与需求,例如 DCTCP,MPTCP,SCTP,CTCP 等。它们的唯一共同点是报文结构相同,且在面对网络拥塞时会“公平”竞争。
接下来我们将重点介绍 QUIC 协议,这是一种基于 UDP 的 应用层协议,现已标准化为 HTTP/3 的基础协议,旨在绕过传统的 TCP + TLS + HTTP 协议栈的局限性,提供 高效、安全、可靠、面向连接 的通信服务,具体而言:
- 面向连接:QUIC 维护两个端点间的逻辑连接,通过维护源连接 ID 与目标连接 ID 来维护连接状态。这里的连接 ID 由端节点自行维护,允许端系统自行更改连接 ID 对应的 IP 地址与端口号,因此在设备切换网络(如从 WiFi 到 4G)时,连接无需重建。
- 安全:QUIC 默认集成 TLS 1.3,通过与 TLS 的 协作,所有数据(包括头部)均加密传输。
- 高效:首次仅需一个 RTT 就可以完成密钥协商和连接建立。 后续连接支持零 RTT 建立,直接发送数据。
- 带多路复用的可靠数据流:QUIC 允许在一条连接上建立多条并行的应用程序级数据流,为每个流独立提供可靠的数据传输服务,单个流的数据包丢失不会阻塞其他流,从而彻底解决了 HTTP 的队首阻塞问题。
- TCP 友好的拥塞控制:QUIC 使用基于 TCP NewReno 的拥塞控制,可以与其它 TCP 协议公平竞争瓶颈链路的带宽。
QUIC 协议通过集成了应用层与传输层的部分服务,因此可以使用更加轻量级的 UDP 提供的传输层服务,并允许应用根据自身情况动态选择需要的服务。